Skip to content

Release v0.9.0 - #15

Merged
pietechsolution merged 15 commits into
mainfrom
release/v0.9.0
Nov 11, 2026
Merged

pietechsolution merged 15 commits into
mainfrom
release/v0.9.0

Conversation

@pietechsolution

@pietechsolution pietechsolution commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Release v0.9.0 for @seatlayer/server on npm: 0.8.0 → 0.9.0. One commit on top of the phase 4 PR #14, which sits on the season 2a PR #13.

Merge order: #13, then #14, then this PR, each with a merge commit (never squash). Until #13 and #14 merge, this PR's diff also shows their commits. The version commit itself is 885bfea5.

What changes

Why now: the phase 4 API is live on production (release A, d349e1639, passed +60 on 11 Nov). Every method in 0.9.0 has its route live.

Checks on this commit, locally, the steps of ci.yml: pnpm install --frozen-lockfile, pnpm typecheck, pnpm test (123/123), pnpm build, pnpm lint:package, and the release job's pnpm validate (publint and attw clean).

After the merge (Orchestrator): tag this PR's merge commit and push the tag.

git fetch origin && git tag v0.9.0 <this PR's merge commit> && git push origin v0.9.0

release.yml checks the tag equals package.json, runs pnpm validate, then pnpm publish --provenance.

Rollback: see #14 ("Rollback"). 0.9.0 only adds; 0.8.0 stays installable.

Live dev smoke, 11 Nov 10:17:42–10:18:11Z, with this commit's dist/ against the dev API (test key): 10/10 PASS.

  • createSeason with inventoryMode: "block" reads back block.
  • retrieveSeasonBlock before the set-aside: none.
  • setAsideSeasonBlock answers { job, block }. The season_block_set_aside job completes in about 5 s, and the block reads ready, mode block, counts.setAside 20.
  • updateSeason to per_hold after the set-aside throws SeatLayerError 409 season_block_exists.
  • releaseSeasonBlock({ scope: { all: true } }): the season_block_release job completes, and the block reads released 20, free 0, windowEnded: true.
  • retrieveSeasonBulkJob reads both jobs.
  • Teardown: the season and its 3 dates are archived. The 20-seat chart stays (409 chart_in_use while archived dates reference it), named -delete-me.
  • A first run read the block 0.4 s after the set-aside, while the job was still running, and saw ready with mode still per_hold. Block mode turns on once the job finishes, so wait for the job before reading mode.

pietechsolution and others added 15 commits November 5, 2026 19:55
… settings, all 56 webhook names, events seriesKey
…tle (2.16c)

createEventSeries takes fromEventKey: an event already set up becomes the first date under its own key and every other date is a copy of it; name and chartKey are then left out. Every date of a series carries the series' plain name. Matches seatmap slice 2.16c.
Adds releaseSeasonLapsedOffers (POST /v1/seasons/{key}/renewal-offers/release-lapsed, no body, header replay, 202 with the job). retrieveSeasonHostedRenewals pages with cursor and limit (1-500) and answers nextCursor, and listSeasonRenewalOffers pages the same way (1-100). createSeasonRenewalOffers answers 201 {offers} for 100 contracts or fewer and 202 {job, batchId} above that. The bring-across (createSeasonHolderImportFromSeason) answers 202 with a holder_import job above 100 holders. Renewal emails take up to 20,000 offer ids; above that, 422 too_many_offer_ids.
…e_abandoned (p2b)

The public API changes in p2b (b88ed794e..ee7df2921): SeasonBulkJobKind adds date_cancel_void and seasonDateCancelVoidJobId names that job; seasonHolderImportRowsPerCall sizes an import call by its dates (a call over it answers 422 invalid_rows with maxRows); SeasonSingleTicketDates.jobRefused; createEventSeries documents 409 create_abandoned.
…b audit)

updateEventSeries sends only the prices that change: each date keeps its
own price for every category or tier left out. A season's null transfer
or return cut-off means the club default from Settings > Ticket site, or
until the date starts when the club has none. Holder transfers and
returns through the secret key are not stopped by the club's customer
switches; cut-offs still apply.
…part C)

A date its season cancelled never opens again: moving its sales to
testable or live, or reopening it, answers 409 season_date_cancelled,
and an event series "sales on" leaves it closed as a failed item of the
job (season_date_cancelled; not in failedDates). A cancelled date can't
be moved, postponed, replaced or marked as taken place: 409
performance_cancelled.
…seSeasonBlock; season.block.ready/released webhook names; the 202 date-leave answer guard. No version bump: publish only once the phase 4 API is on production
…on seats sections joined under 0.9.0 (2026-11-11)
@pietechsolution
pietechsolution merged commit ae0da80 into main Nov 11, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants